package com.mlh.binarytree;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 缪林辉
 * @date 2024/3/27 11:08
 * @DESCRIPTION
 */
// 给你一个二叉树的根节点 root ，按任意顺序 ，返回所有从根节点到叶子节点的路径。
// 输入：root = [1,2,3,null,5]
// 输出：["1->2->5","1->3"]

public class BinaryTreePaths {
    //自己写出，执行时间过长（8ms）,原因直接使用String拼接
    //后面改成StringBuffer 执行时间缩短到1ms
    public List<String> method1(TreeNode root) {
        List<String>res=new ArrayList<>();
        recursion(root,"",res);
        return res;
    }
    //字符串传参是深拷贝
    public void recursion(TreeNode node,String oneRes,List<String> res){
        if(node==null){
            return;
        }
        //利用StringBuffer来处理字符串拼接
        StringBuffer path=new StringBuffer(oneRes);
        //当前节点不为null，则加入节点到路径中
        path.append(Integer.toString(node.val));
        //看看当前节点是不是叶子节点
        if (node.left==null&&node.right==null){
            res.add(path.toString());//是叶子节点则路径加入到结果集合中
            return;
        }
        //不是叶子节点就进行递归
        path.append("->");
        recursion(node.left,path.toString(),res);
        recursion(node.right,path.toString(),res);
    }
}
